package com.mdd.common.util;

/**
 * @author shenjian
 * @createTime 2023年02月09日 22:04:00
 */
public class LocationUtils {

    /** 地球赤道半径 */
    private final static Double EARTH_RADIUS = 6378.137;

    private static Double rad(Double d) {
        return d * Math.PI / 180.0;
    }

    /**
     * @title 经纬度获取距离，单位为米
     * @param  lat1     起点维度
     * @param  lng1     起点经度
     * @param  lat2     终点维度
     * @param  lng2     重点经度
     * @return  double
     * @author  shenjian
     */
    public static Double getDistance(Double lat1, Double lng1, Double lat2, Double lng2) {
        final Double radLat1 = rad(lat1);
        final Double radLat2 = rad(lat2);
        final double a = radLat1 - radLat2;
        final double b = rad(lng1) - rad(lng2);
        double s = 2 * Math.asin(
                Math.sqrt(
                        Math.pow(Math.sin(a / 2), 2.0)
                                + (Math.cos(radLat1) * Math.cos(radLat2)
                                * Math.pow(Math.sin(b / 2), 2.0))
                )
        );
        s *= EARTH_RADIUS;
        s = Math.round(s * 10000.0) / 10000.0;
        s *= 1000;
        return s;
    }
}
